﻿using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Xml;
using System.Collections.ObjectModel;
using System.Collections;
using System.Xml.Linq;
using System.Collections.Generic;
using RssV_m_v.Model;

namespace RssV_m_v.ViewModel
{
    /// <summary>
    /// Classe utilisé comme service de gestion des flux RSS.
    /// </summary>
    public class RssService : IRssService
    {
        /// <summary>
        /// Fonction de chargement des flux RSS
        /// </summary>
        /// <param name="feedUrl">Contient l'adresse URL du flux RSS</param>
        /// <param name="getRssFeedCompleted">Contient l'ObservableCollection de la liste des flux RSS</param>
        public void chargerRss(string feedUrl, Action<ObservableCollection<News>> getRssFeedCompleted)
        {
            var webClient = new WebClient();

            webClient.DownloadStringCompleted += delegate(object sender, DownloadStringCompletedEventArgs args)
            {
                // Si une erreur s'est produite pendant le téléchargement, on ne renvoit rien
                if (args.Error != null) 
                    return;

                // On va transformer le résultat en éléments XML
                XElement xmlItems = XElement.Parse(args.Result);
                
                //Création d'une ObservableCollection de News
                var items = new ObservableCollection<News>();

                // variable contenant le debut de la chaine a supprimer
                string recherche = "<img";
                foreach (var item in xmlItems.Descendants("item"))
                {
                    //Création d'une News
                    News n = new News();
                    //Définition du Titre de la News
                    n.Title = item.Element("title").Value;
                    //Définition de l'url de la News
                    n.Url = item.Element("link").Value;
                    //Définition de la description de la News
                    n.Description = item.Element("description").Value;
                    int debut = n.Description.IndexOf(recherche);
                    if (debut!=-1) n.Description = n.Description.Remove(debut);
                    //Test si l'adresse de l'image est null
                    try
                    {
                        //Définition de l'adresse de l'imag
                        n.UrlImage = item.Element("enclosure").Attribute("url").Value;
                       
                    }
                    catch (Exception e)
                    {
                        n.UrlImage = null;
                    }
                    //Ajout de la News à la liste des News du flux RSS
                    items.Add(n);
                }
                getRssFeedCompleted(items);
            };
            webClient.DownloadStringAsync(new Uri(feedUrl));
        }
    }
}
        
        
